package org.jsola.hr.web;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.jsola.core.Page;
import org.jsola.core.Result;
import org.jsola.hr.dto.CrmMemberAddDTO;
import org.jsola.hr.dto.CrmMemberAndCustomerAddDTO;
import org.jsola.hr.dto.CrmMemberUpdateDTO;
import org.jsola.hr.query.CrmMemberQuery;
import org.jsola.hr.query.HrUserQuery;
import org.jsola.hr.vo.CrmMemberListVO;
import org.jsola.hr.vo.CrmMemberVO;
import org.jsola.hr.vo.HrUserVO;

import java.nio.file.attribute.UserPrincipal;
import java.util.List;

/**
 * 成员表
 *
 * @author zhr
 */
@Api(tags = "hr-成员表")
public interface ICrmMemberControllerAPI {

    /**
     * 获取自己下属的客户主管信息
     * @return 下属客户主管列表
     */
    @ApiOperation(value="获取自己下属的客户主管信息")
    @ApiImplicitParams({
    })
    Result<List<CrmMemberVO>> getMyManagerList();

    /**
     * 获取自己下属的客户主管信息
     * @param memberId 成员表id
     * @return 下属客户主管列表
     */
    @ApiOperation(value="获取自己下属的客户主管信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "crmMemberId", dataType = "String", value = "成员表id", paramType = "path")
    })
    Result<List<CrmMemberVO>> getMyManager(String memberId);

    /**
     *
     * 获取用户（新增权限使用）
     * @param crmMemberQuery 1查询没有权限的用户2查询客户主管
     * @return VO
     *
     */
    @ApiOperation(value = "获取用户（新增权限使用）")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "crmMemberQuery", dataType = "CrmMemberQuery", value = "成员表查询参数", paramType = "query")
    })
    Result<List<CrmMemberVO>> getAllUser(CrmMemberQuery crmMemberQuery);

    /**
     *
     * 权获取自己的客户权限1客户经理2客户主管
     * @return 权限类型 1客户经理2客户主管
     *
     */
    @ApiOperation(value = "获取自己的客户权限1客户经理2客户主管")
    @ApiImplicitParams({
    })
    Result<Integer> getMyJurisdiction();

    /**
     *
     * 权限范围列表（客户主管和没有权限的）
     * hrUserQuery  查询参数
     * @return page
     *
     */
    @ApiOperation(value = "权限范围列表（客户主管和没有权限的）")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "hrUserQuery", dataType = "HrUserQuery", value = "用户查询条件", paramType = "query")
    })
    Result<List<HrUserVO>> getJurisdictionRange(HrUserQuery hrUserQuery);


    /**
     * 配置权限
     * @param crmMemberQuery 成员表
     * @return 更新数量
     */
    @ApiOperation(value = "配置权限")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "crmMemberQuery", dataType = "CrmMemberQuery", value = "修改成员表", paramType = "body")
    })
    Result<Integer> updateJurisdiction(CrmMemberQuery crmMemberQuery);


    /**
     * 成员新增权限并且分配客户
     * @param crmMemberAndCustomerAddDTO 成员表新增实体
     * @return 成员表展示对象
     */
    @ApiOperation(value = "成员新增权限并且分配客户")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "crmMemberAndCustomerAddDTO", dataType = "CrmMemberAndCustomerAddDTO", value = "成员新增权限并且分配客户DTO", paramType = "body")
    })
    Result<CrmMemberVO> addJurisdiction(CrmMemberAndCustomerAddDTO crmMemberAndCustomerAddDTO);

    /**
     * 新增成员表
     * @param crmMemberAddDTO 成员表新增实体
     * @return 成员表展示对象
     */
    @ApiOperation(value = "新增成员表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "crmMemberAddDTO", dataType = "CrmMemberAddDTO", value = "新增成员表", paramType = "body")
    })
    Result<CrmMemberVO> save(CrmMemberAddDTO crmMemberAddDTO);


    /**
     * 修改成员表
     * @param crmMemberUpdateDTO 成员表
     * @return 更新数量
     */
    @ApiOperation(value = "修改成员表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "crmMemberUpdateDTO", dataType = "CrmMemberUpdateDTO", value = "修改成员表", paramType = "body")
    })
    Result<Integer> update(CrmMemberUpdateDTO crmMemberUpdateDTO);




    /**
     * 删除单个成员表，彻底删除
     * @param crmMemberId 成员表id
     * @return 删除数量
     */
    @ApiOperation(value="删除单个成员表，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "crmMemberId", dataType = "String", value = "成员表id", paramType = "path")
    })
    Result<Integer> delete(String crmMemberId);


    /**
     * 批量删除成员表，彻底删除
     * @param crmMemberIds 成员表id集合
     * @return 删除数量
     */
    @ApiOperation(value = "批量删除成员表，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "crmMemberIds", dataType = "String[]", value = "成员表id数组", paramType = "body" ,allowMultiple = true)
    })
    Result<Integer> deleteBatch(String[] crmMemberIds);


    /**
     * 根据成员表id查询成员表详情
     * @param crmMemberId 成员表id
     * @return 成员表详情
     */
    @ApiOperation(value="根据成员表id查询成员表详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "crmMemberId", dataType = "String", value = "成员表id", paramType = "path")
    })
    Result<CrmMemberVO> findById(String crmMemberId);


    /**
     * 查询成员表
     * @param crmMemberQuery 成员表查询参数
     * @return page
     */
    @ApiOperation(value="查询成员表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "crmMemberQuery", dataType = "CrmMemberQuery", value = "成员表查询参数", paramType = "query")
    })
    Result<List<CrmMemberListVO>> listAll(CrmMemberQuery crmMemberQuery);


     /**
     * 分页查询成员表
     * @param crmMemberQuery 成员表查询参数
     * @return page
     */
    @ApiOperation(value="分页查询成员表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "crmMemberQuery", dataType = "CrmMemberQuery", value = "成员表查询参数", paramType = "query")
    })
    Result<Page<CrmMemberListVO>> page(CrmMemberQuery crmMemberQuery);


}

